--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/frontend/NotificationBell.test.js 059d2cbdc100fcb9dd6f7749056a8ca676ab3eba (059d2cbd) Text, 20.41 KB
Tff7b72import Tb4b4b4{ Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3NotificationBell Tff7b72from Ta5d6ff"../../meshchatx/src/frontend/components/NotificationBell.vue"Tb4b4b4;
Tff7b72let Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/WebSocketConnection"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3onTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4] Tff7b72= Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4] Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4]Tb4b4b4.Te6edf3pushTb4b4b4(Te6edf3handlerTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3offTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4] Tff7b72= Te6edf3wsHandlersTb4b4b4[Te6edf3eventTb4b4b4]Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3hTb4b4b4) Tb4b4b4=> Te6edf3h Tff7b72!== Te6edf3handlerTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/Utils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{ Te6edf3formatTimeAgoTff7b72: Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Ta5d6ff"1h ago" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3MaterialDesignIcon Tff7b72= Tb4b4b4{ Te6edf3templateTff7b72: Ta5d6ff'<div class="mdi"></div>'Tb4b4b4, Te6edf3propsTff7b72: Tb4b4b4[Ta5d6ff"iconName"Tb4b4b4] Tb4b4b4}Tb4b4b4;
Tff7b72function Te6edf3mountBellTb4b4b4(Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mountTb4b4b4(Te6edf3NotificationBellTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3componentsTff7b72: Tb4b4b4{ Te6edf3MaterialDesignIcon Tb4b4b4}Tb4b4b4,
Te6edf3directivesTff7b72: Tb4b4b4{ Ta5d6ff"click-outside"Tff7b72: Tb4b4b4{ Te6edf3mountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3unmountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{
Ta5d6ff"app.notifications_no_new"Tff7b72: Ta5d6ff"No new notifications"Tb4b4b4,
Ta5d6ff"app.notifications_empty_history"Tff7b72: Ta5d6ff"No notification history"Tb4b4b4,
Ta5d6ff"app.notifications_history_title"Tff7b72: Ta5d6ff"Recent notification history"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72return Te6edf3mapTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72|| Te6edf3keyTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4...Te6edf3optionsTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3simulateWsMessageTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3extra Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3payload Tff7b72= Tb4b4b4{ Te6edf3typeTb4b4b4, Tb4b4b4...Te6edf3extra Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3type Tff7b72=== Ta5d6ff"lxmf.delivery" Tff7b72&& Te6edf3payloadTb4b4b4.Te6edf3lxmf_message Tff7b72=== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Te6edf3payloadTb4b4b4.Te6edf3lxmf_message Tff7b72= Tb4b4b4{ Te6edf3is_incomingTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3data Tff7b72= Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4;
Tb4b4b4(Te6edf3wsHandlersTb4b4b4[Ta5d6ff"message"Tb4b4b4] Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3hTb4b4b4) Tb4b4b4=> Te6edf3hTb4b4b4(Tb4b4b4{ Te6edf3data Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell UI"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"renders bell button"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3btn Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button.relative.rounded-full"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3btnTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows unread badge when unreadCount > 0"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= T79c0ff5Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"5"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows 9+ when unreadCount > 9"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= T79c0ff12Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"9+"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"opens dropdown on button click"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3isDropdownOpenTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3textContentTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Notifications"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows Clear button when dropdown open and notifications exist"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"h1"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A"Tb4b4b4, Te6edf3updated_atTff7b72: Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"Hi" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3textContentTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Clear"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows No new notifications when empty"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff150Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3textContentTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"No new notifications"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"opening empty dropdown adds one notifications fetch after mount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3notifGetsAfterMount Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications"Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff150Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3notifGetsAfterOpen Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications"Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3notifGetsAfterOpen Tff7b72- Te6edf3notifGetsAfterMountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"dropdown has Notifications heading when open"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3h3 Tff7b72= Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3querySelectorTb4b4b4(Ta5d6ff"h3"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3h3Tff7b72?Tb4b4b4.Te6edf3textContentTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"Notifications"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell websocket reliability"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"reloads on lxmf.delivery websocket event"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"d1"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"X"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"msg" Tb4b4b4}Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff1 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf.delivery"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"reloads on telephone_missed_call websocket event"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: T79c0ff1Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"telephone_missed_call"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"c1"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"Caller"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"Missed"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"telephone_missed_call"Tb4b4b4, Tb4b4b4{ Te6edf3remote_identity_hashTff7b72: Ta5d6ff"c1" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"reloads on new_voicemail websocket event"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: T79c0ff2Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"telephone_voicemail"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"v1"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"VM"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"Voicemail"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"new_voicemail"Tb4b4b4, Tb4b4b4{ Te6edf3remote_identity_hashTff7b72: Ta5d6ff"v1" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"does NOT reload on unrelated websocket events"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3callsBefore Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"telephone_ringing"Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"telephone_call_ended"Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf_message_state_updated"Tb4b4b4)Tb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf.delivery"Tb4b4b4, Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3is_incomingTff7b72: Tff7b72false Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3callsBeforeTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"does NOT reload on outbound lxmf.delivery (delivery confirmation path)"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3callsBefore Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf.delivery"Tb4b4b4, Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3is_incomingTff7b72: Tff7b72falseTb4b4b4, Te6edf3stateTff7b72: Ta5d6ff"delivered" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3callsBeforeTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"reloads on inbound lxmf.delivery"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3callsAfterMount Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4;
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf.delivery"Tb4b4b4, Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{ Te6edf3is_incomingTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(Te6edf3callsAfterMountTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3notifCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3notifCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"rapid sequential websocket events all trigger reloads"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3initialCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff5Tb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3simulateWsMessageTb4b4b4(Ta5d6ff"lxmf.delivery"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(Te6edf3initialCallsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell badge accuracy"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"badge hidden when unread count is 0"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3badge Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"span.bg-red-500"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3badgeTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"badge shows exact count for 1-9"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3n Tff7b72= T79c0ff1Tb4b4b4; Te6edf3n Tff7b72<= T79c0ff9Tb4b4b4; Te6edf3nTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= Te6edf3nTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Tffa657StringTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"badge shows 9+ for counts above 9"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3n Tff7b72of Tb4b4b4[T79c0ff10Tb4b4b4, T79c0ff50Tb4b4b4, T79c0ff100Tb4b4b4, T79c0ff999Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= Te6edf3nTb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"9+"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Tffa657StringTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"badge updates reactively when unreadCount changes"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= T79c0ff3Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"3"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"span.bg-red-500"Tb4b4b4)Tb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCount Tff7b72= T79c0ff15Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"9+"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"opening dropdown syncs unread count from server after mark-as-viewed"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3vi
Tb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"d1"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"m" Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff3Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"d1"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"m" Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff3Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff80Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"API failure does not cause false badge"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockRejectedValueTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Network error"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3notificationsTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"API returning null/empty fields does not cause false badge"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tff7b72nullTb4b4b4, Te6edf3unread_countTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell mark-as-viewed"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"calls mark-as-viewed API when dropdown is opened"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4, Te6edf3destination_hashTff7b72: Ta5d6ff"abc"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"A"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"x" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3typeTff7b72: Ta5d6ff"telephone_missed_call"Tb4b4b4, Te6edf3idTff7b72: T79c0ff42Tb4b4b4, Te6edf3destination_hashTff7b72: Ta5d6ff"mc"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"B"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"y" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff2Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3postCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4;
Tff7b72const Te6edf3markCall Tff7b72= Te6edf3postCallsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications/mark-as-viewed"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3markCallTb4b4b4)Tb4b4b4.Te6edf3toBeTruthyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3markCallTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3destination_hashesTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"abc"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3markCallTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3notification_idsTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(T79c0ff42Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"skips mark-as-viewed when no notifications"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3markCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications/mark-as-viewed"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3markCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell history"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows history control when dropdown is open"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button.relative.rounded-full"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3historyBtn Tff7b72= Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3querySelectorTb4b4b4(Ta5d6ff'[aria-label="Recent notification history"]'Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3historyBtnTb4b4b4)Tb4b4b4.Te6edf3toBeTruthyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"requests unread=false when toggling history on"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: T79c0ff9Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"telephone_missed_call"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"ab"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"X"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"missed"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button.relative.rounded-full"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff120Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockClearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3notifCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"/api/v1/notifications"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3notifCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3lastParams Tff7b72= Te6edf3notifCallsTb4b4b4[Te6edf3notifCallsTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3paramsTb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3lastParamsTb4b4b4.Te6edf3unreadTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3showHistoryTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"resets history mode when dropdown closes"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3showHistory Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3closeDropdownTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3showHistoryTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shows empty history copy in history mode"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button.relative.rounded-full"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff120Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleHistoryTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3textContentTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"No notification history"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell clear all"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3post Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3wsHandlers Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"clears all notifications and marks conversations as read"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3callCount Tff7b72= T79c0ff0Tb4b4b4;
Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3get Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3url Tff7b72=== Ta5d6ff"/api/v1/notifications"Tb4b4b4) Tb4b4b4{
Te6edf3callCountTff7b72++Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3callCount Tff7b72<= T79c0ff2Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"x"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"X"Tb4b4b4, Te6edf3contentTff7b72: Ta5d6ff"m" Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3url Tff7b72=== Ta5d6ff"/api/v1/lxmf/conversations"Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3conversationsTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"conv1"Tb4b4b4, Te6edf3is_unreadTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"conv2"Tb4b4b4, Te6edf3is_unreadTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountBellTb4b4b4(Tb4b4b4{ Te6edf3attachToTff7b72: Tffa657documentTb4b4b4.Te6edf3body Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3clearAllNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3rTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3rTb4b4b4, T79c0ff100Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3readCalls Tff7b72= Tffa657globalTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72?Tb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/mark-as-read"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3readCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3readCallsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"conv1"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────